home *** CD-ROM | disk | FTP | other *** search
- ; Patch for faulty "mathieeesingbas.library" on 68040
- ;
- ; Copyright (c) 1994-1995 by Matthias Scheler
-
- CODE
- MC68882
-
- INCLUDE "exec/types.i"
- INCLUDE "exec/memory.i"
- INCLUDE "exec/execbase.i"
- INCLUDE "dos/dosextens.i"
-
- ; Constants
-
- _LVOForbid EQU -132
- _LVOAllocMem EQU -198
- _LVOFreeMem EQU -210
- _LVOGetMsg EQU -372
- _LVOReplyMsg EQU -378
- _LVOWaitPort EQU -384
- _LVOSetFunction EQU -420
- _LVOCloseLibrary EQU -414
- _LVOOpenLibrary EQU -552
- _LVOCacheClearU EQU -636
-
- _LVOPutStr EQU -948
-
- _LVOIEEESPMul EQU -78
- _LVOIEEESPDiv EQU -84
-
- _AbsExecBase EQU 4
-
- ; Macros
-
- CALL: MACRO
- jsr _LVO\1(a6)
- ENDM
-
- ; we don't support Workbench
-
- move.l (_AbsExecBase).w,a6
- move.l ThisTask(a6),a0
- tst.l pr_CLI(a0)
- bne.s CLI
- lea pr_MsgPort(a0),a2
-
- move.l a2,a0
- CALL WaitPort
-
- CALL Forbid
-
- move.l a2,a0
- CALL GetMsg
-
- move.l d0,a1
- CALL ReplyMsg
-
- moveq #0,d0
- rts
-
- ; check for 68040 with FPU (=> NO 68LC040)
-
- CLI: move.w AttnFlags(a6),d0
- and.w #AFF_68040+AFF_68882,d0
- cmp.w #AFF_68040+AFF_68882,d0
- beq.s OpenMathLib
-
- moveq #5,d0
- rts
-
- ; open "mathieeesingbas.library"
-
- OpenMathLib: moveq #10,d2
-
- lea MathName(pc),a1
- moveq #0,d0
- CALL OpenLibrary
-
- move.l d0,d3
- beq Exit
-
- ; check if patch is already installed
-
- move.l d3,a0
- move.l _LVOIEEESPMul+2(a0),a0
- cmp.l #'PTCH',-4(a0)
-
- bne.s GetMem
-
- moveq #5,d2
- bra.s CloseLib
-
- ; allocate memory
-
- GetMem: moveq #PatchEnd-Patch,d0
- moveq #MEMF_PUBLIC,d1
- CALL AllocMem
-
- move.l d0,d4
- beq.s CloseLib
-
- lea Patch(pc),a0
- move.l d4,a1
- moveq #PatchEnd-Patch-1,d0
- CopyMemLoop: move.b (a0)+,(a1)+
- dbf d0,CopyMemLoop
-
- CALL CacheClearU
-
- ; apply patches
-
- move.l d3,a1
- lea _LVOIEEESPMul,a0
- move.l d4,d0
- addq.l #NewMul-Patch,d0
- CALL SetFunction
-
- move.l d3,a1
- lea _LVOIEEESPDiv,a0
- move.l d4,d0
- add.l #NewDiv-Patch,d0
- CALL SetFunction
-
- ; print message
-
- moveq #0,d2
-
- lea DOSName(pc),a1
- moveq #37,d0
- CALL OpenLibrary
-
- move.l d0,d4
- beq.s CloseLib
-
- exg d4,a6
- move.l #PatchMsg,d1
- CALL PutStr
-
- exg d4,a6
- move.l d4,a1
- CALL CloseLibrary
-
- ; close "mathieeesingbas.library"
-
- CloseLib move.l d3,a1
- CALL CloseLibrary
-
- Exit: move.l d2,d0
- rts
-
- ; Patch
-
- Patch: dc.b "PTCH"
-
- NewMul: fmove.s d0,fp0
- fmove.s d1,fp1
- fmul fp1,fp0
- fmove.s fp0,d0
- rts
-
- NewDiv: fmove.s d0,fp0
- fmove.s d1,fp1
- fdiv fp1,fp0
- fmove.s fp0,d0
- rts
-
- PatchEnd:
-
- ; Strings
-
- Version: dc.b "$VER: MathIEEESingBasPatch 1.2 (14.02.95)",0
-
- MathName: dc.b "mathieeesingbas.library",0
- DOSName: dc.b "dos.library",0
-
- PatchMsg: dc.b "mathieeesingbas.library patched",10,0
-
- END
-